#include "common.hpp"

int main()
{
    // 由客户端获取服务端已经申请的共享内存空间

    key_t key = getKey();
    printf("key : 0x%x\n", key);

    // 客户端因为内部传的是IPC_CREAT选项，所以不能让客户端先运行，不然他也会申请共享内存空间
    // 导致服务端再次启动时由于key值一样，就会发现内存已经有该共享内存空间了
    // 并且服务端是IPC_CREAT和IPC_EXCL一起传的，发现存在shm就会报错了
    int shmid = getShm(key);
    std::cout << "shmid : " << shmid << std::endl;


    char *mem = (char*)shmAttach(shmid);   // 有点像malloc的意思
    printf("client attach success!, address start : %p\n", mem);


    // 通信
    // 发送pid，count，message等信息
    int pid = getpid();
    int count = 1;
    std::string msg = "我是另一个进程，我正在与你通信呢！";
    char buffer[1024];
    while(true)
    {   
        // snprintf(buffer, sizeof(buffer), "%s , [pid : %d][count : %d]", msg.c_str(), pid, msg);
        // memcpy(mem, buffer, strlen(buffer) + 1);

        snprintf(mem, MAX_SIZE, "%s [pid : %d][count : %d]", msg.c_str(), pid, count++);
        sleep(1);
    }
    
    shmDetach(mem);
    printf("client detach success!\n");
    
    return 0;
}